home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Demos / OOFILE / Buildable, limited OOFILE / c-tree headers / ctstrc.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-12  |  19.0 KB  |  694 lines  |  [TEXT/CWIE]

  1. /*
  2.  *    This program is the CONFIDENTIAL and PROPRIETARY property 
  3.  *    of FairCom(R) Corporation. Any unauthorized use, reproduction or
  4.  *    transfer of this computer program is strictly prohibited.
  5.  *
  6.  *      Copyright (c) 1984 - 1994 FairCom Corporation.
  7.  *    This is an unpublished work, and is subject to limited distribution and
  8.  *    restricted disclosure only. ALL RIGHTS RESERVED.
  9.  *
  10.  *            RESTRICTED RIGHTS LEGEND
  11.  *    Use, duplication, or disclosure by the Government is subject to
  12.  *    restrictions set forth in subparagraph (c)(1)(ii) of the Rights in
  13.  *     Technical Data and Computer Software clause at DFARS 252.227-7013.
  14.  *    FairCom Corporation, 4006 West Broadway, Columbia, MO 65203.
  15.  *
  16.  *    c-tree PLUS(tm)    Version 6.4
  17.  *            Release B
  18.  *            October 19, 1994
  19.  */
  20.  
  21. #ifndef ctSTRCH
  22. #define ctSTRCH
  23.  
  24.             /* Data Structures */
  25. #include "ctsema.h"
  26.  
  27. #ifdef DBG749x
  28. #define DBG749xSIG    0x796a5b4c
  29. #define DBG749xUSE    0x68594a3b
  30. typedef struct pctspc {
  31.     union {
  32.     pLONG    ptr;
  33.     LONG    lng;
  34.     } uctSPC;
  35.     LONG    sig;    /* debug signature */
  36. } pctSPC;
  37. #else
  38. typedef union pctspc {
  39.     pLONG    ptr;
  40.     LONG    lng;
  41. } pctSPC;
  42. #endif
  43.  
  44. typedef struct {
  45.     TEXT    userid[IDZ];
  46.     LONG    userstmp;
  47.     LONG    usermem;
  48.     LONG    userattr;
  49.     TEXT    userword[PWZ];
  50.     TEXT    userds[DSZ];
  51. } FC_USER;
  52. typedef FC_USER ctMEM *    pFC_USER;
  53.  
  54. typedef struct {
  55.     TEXT    groupid[IDZ];
  56.     LONG    groupstmp;
  57.     LONG    groupmem;
  58.     LONG    groupattr;
  59.     TEXT    groupds[DSZ];
  60. } FC_GROUP;
  61.  
  62. typedef struct {
  63.     TEXT    userid[IDZ];
  64.     TEXT    seqnum;
  65.     TEXT    groupid[IDZ];
  66. } FC_UG;
  67.  
  68. typedef struct batlst {
  69.     struct
  70.     batlst ctMEM
  71.         *batlnk;
  72.     union {
  73.         LONG     batpos;
  74.         pTEXT     batkyp;
  75.     } u;
  76. } BATLST;
  77. typedef BATLST ctMEM *    pBATLST;
  78.  
  79. typedef struct bathdr {
  80.     pBATLST     sbathed;    /* retrieval list hdr        */
  81.     pBATLST     sbatail;    /* retrieval list tail        */
  82.     pBATLST     sbatlsp;    /* retrieval list current pos    */
  83.     pBATLST     sbatmrk;    /* retrieval list perm mark    */
  84.     pVOID     sbatrqp;    /* request pointer        */
  85.     pTEXT     sbatcnu;    /* continuation buffer pointer    */
  86.     pTEXT     sbatbfp;    /* buffer pointer        */
  87.     pTEXT     sbatcrp;    /* current pointer        */
  88.  
  89.     pVOID     sbatrbp;    /* record buffer pointer    */
  90.     LONG     sbattot;    /* total count            */
  91.     LONG     sbatlkd;    /* number accessible        */
  92.     LONG     sbatrem;    /* remaining to be processed    */
  93.     LONG     sbatrs1;    /* reserved area #1        */
  94.     VRLEN     sbatrbz;    /* record buffer size        */
  95.     VRLEN     sbatbfz;    /* buffer size            */
  96.     VRLEN     sbatrs2;    /* reserved area #2        */
  97.     COUNT     sbatfil;    /* filno            */
  98.     COUNT     sbatopc;    /* current function        */
  99.     COUNT     sbatvry;    /* verify key/rec flag        */
  100.     COUNT     sbatret;    /* return type            */
  101.     COUNT     sbatlok;    /* lock type            */
  102.     COUNT     sbatcom;    /* complete vs partial flag    */
  103.     COUNT     sbatreq;    /* partial key vs filter flag    */
  104.     COUNT     sbatrs3;    /* reserved area #3        */
  105.     } BATHDR;
  106. typedef BATHDR ctMEM *    pBATHDR;
  107.  
  108. #ifndef ctOldALCBAT
  109. typedef struct savbat {
  110.     struct savbat
  111.         *sblnk;        /* save batch link */
  112.     BATHDR     sbhdr;        /* save batch header */
  113.     COUNT     sbnum;        /* save batch number */
  114.     } SAVBAT;
  115. typedef SAVBAT ctMEM *    pSAVBAT;
  116. typedef SAVBAT ctMEM * ctMEM *    ppSAVBAT;
  117. #endif
  118.  
  119. typedef struct {
  120.     UCOUNT    repad;        /* alignment padding */
  121.     UCOUNT    remrk;        /* record mark */
  122.     VRLEN    retot;        /* total length */
  123.     VRLEN    relen;        /* in-use length */
  124.     LONG    resup;        /* super file member */
  125.     LONG    reflk;        /* forward link */
  126.     LONG    reblk;        /* back link */
  127.     ULONG    retyp;        /* resource type */
  128.     ULONG    renum;        /* resource number */
  129.     TEXT    renam;        /* optional name */
  130.     } RESHDR;
  131. typedef RESHDR ctMEM *    pRESHDR;
  132.  
  133. typedef struct lstitm {
  134.     struct
  135.     lstitm ctMEM
  136.            *lstlnk;
  137.     pTEXT    lstbuf;
  138. } LSTITM;
  139. typedef LSTITM ctMEM *    pLSTITM;
  140. typedef LSTITM ctMEM * ctMEM * ppLSTITM;
  141.  
  142. typedef struct lsthed {
  143.     struct
  144.     lsthed ctMEM
  145.            *hedprv;
  146.     struct
  147.     lsthed ctMEM
  148.            *hednxt;
  149.     struct
  150.     lstanc ctMEM
  151.            *hedanc;
  152.     pLSTITM hedstk;
  153.     pTEXT   hednew;
  154.     UCOUNT    hedcnt;
  155.     UCOUNT    hedtot;
  156.     UCOUNT    hedavl;
  157.     UCOUNT    hedrsv;
  158. } LSTHED;
  159. typedef LSTHED ctMEM *    pLSTHED;
  160. typedef LSTHED ctMEM * ctMEM * ppLSTHED;
  161.  
  162. typedef struct lstanc {
  163.     pLSTHED    ancact;        /* active list */
  164.     LONG    anctot;        /* total items */
  165.     LONG    ancavl;        /* # of avl items */
  166.     UINT    anclst;        /* # of lists */
  167.     UINT    anclav;        /* # of list with avl items */
  168. } LSTANC;
  169. typedef LSTANC ctMEM *    pLSTANC;
  170.  
  171. typedef struct abtlst {
  172.     struct
  173.     abtlst ctMEM
  174.            *ablink;
  175.     LONG    abpos;    /* ABNODSIZ is based on 4 fields being contiguous */
  176.     LONG    abtran;
  177.     LONG    abkey;
  178.     NINT    abnum;
  179. } ABTLST;
  180. typedef ABTLST ctMEM *    pABTLST;
  181. #define ABNODSIZ    (3 * SIZEOF(LONG) + SIZEOF(NINT))
  182.  
  183. typedef struct comlst {
  184.     struct
  185.     comlst ctMEM
  186.            *cmlink;
  187.     LONG    cmtran;
  188. } COMLST;
  189. typedef COMLST ctMEM *    pCOMLST;
  190. typedef COMLST ctMEM * ctMEM * ppCOMLST;
  191.  
  192. typedef struct dqmsg {
  193.     LONG    dnode;
  194.     LONG    dtime;
  195.     COUNT    dmemb;
  196.     COUNT    dflmd;
  197.     COUNT    datmp;
  198.     COUNT    drsvd;
  199.     TEXT    dfile[MAX_NAME + 1];
  200. } DQMSG;
  201. typedef DQMSG ctMEM *    pDQMSG;
  202.  
  203. typedef struct dedlok {
  204.     COUNT    blkdby;    /* blocked by user#   */
  205.     COUNT    blking;    /* # of users blocked */
  206. } DEDLOK;
  207. typedef DEDLOK ctMEM *    pDEDLOK;
  208.  
  209. typedef struct ctconbuf {    /* context key value info    */
  210.     COUNT    cb_key;        /* keyno            */
  211.     COUNT    cb_len;        /* key length            */
  212.     TEXT    cb_flg;        /* key existence flag        */
  213.     TEXT    cb_rsv;        /* reserved            */
  214.     TEXT    cb_val[2];    /* key value buffer head    */
  215.     } ctCONBUF;
  216. typedef ctCONBUF ctMEM * pctCONBUF;
  217. #define ctCONBUFSIZ    SIZEOF(ctCONBUF)
  218.  
  219. typedef struct cticon {        /* ISAM context            */
  220.     struct cticon ctMEM
  221.            *iconptr;    /* context pointer (link)    */
  222.     pctCONBUF
  223.         iconbuf;    /* alloc'd key value info    */
  224.     ctRECPT    iconpos;    /* context record position    */
  225.     LONG    iconrsv;    /* reserved            */
  226.     COUNT    iconid;        /* context ID            */
  227.     COUNT    icondat;    /* user datno            */
  228.     COUNT    iconkeys;    /* number of keys in context    */
  229.     COUNT    irsvd;        /* reserved            */
  230.     } ctICON;
  231. typedef ctICON ctMEM *    pctICON;
  232. typedef ctICON ctMEM * ctMEM * ppctICON;
  233.  
  234. typedef struct fusr {
  235.     LONG    pmsk;     /* permission mask        */
  236.     LONG    nent;     /* incremental nument chg    */
  237.     LONG    curp;     /* current byte position    */
  238.     LONG    curt;     /* temporary byte position    */
  239.     LONG    curr;     /* current resource position    */
  240.     LONG    retnod;     /* current node position    */
  241. #ifdef ctSQL
  242.     LONG    wlkcnt;     /* write lock count        */
  243. #endif
  244.     pTEXT   keyp;     /* current key value ptr    */
  245.     pTEXT   keyt;     /* temporary key value ptr    */
  246.     pTEXT   keyl;     /* low level key result    */
  247.     pVOID    datflt;     /* pointer to data filter    */
  248.     pctICON    concur;     /* current context        */
  249.     COUNT    flmp;     /* user to internal file# map    */
  250.     COUNT    retelm;     /* current element within node */
  251.     TEXT    fupd;     /* file update flag        */
  252.     TEXT    plen;     /* keyp length flag        */
  253.     TEXT    tlen;     /* keyt length flag        */
  254.     TEXT    supd;     /* serialization update flag    */
  255. } FUSR;
  256. typedef FUSR ctMEM *    pFUSR;
  257. typedef FUSR ctMEM * ctMEM * ppFUSR;
  258.  
  259. typedef struct blklst {
  260.     SEMA    semab;
  261.     struct
  262.     blklst ctMEM
  263.            *blklnk;
  264.     struct
  265.     reclok ctMEM
  266.            *blklok;
  267.     pVOID    blkfcb;
  268.     COUNT    blkusr;
  269.     COUNT    blktyp;
  270. #ifdef MTDEBUG
  271.     TEXT    semtyp;
  272.     TEXT    semnam[SNAMELEN];
  273. #endif
  274.     } BLKLST;
  275. typedef BLKLST ctMEM *    pBLKLST;
  276. typedef BLKLST ctMEM * ctMEM * ppBLKLST;
  277.  
  278. typedef struct bfhlst {
  279.     struct bfhlst ctMEM *flnk;
  280.     struct bfhlst ctMEM *blnk;
  281.     pVOID             hbuf;
  282.     } BHL;
  283. typedef BHL ctMEM *    pBHL;
  284. typedef BHL ctMEM * ctMEM * ppBHL;
  285.  
  286. typedef struct datbuf {
  287.     struct
  288.     datbuf ctMEM
  289.         *nxtbuf;
  290.     pTEXT     datorg;
  291.     LONG     datpos;
  292. #ifdef MULTITRD
  293.     LONG     datpps;
  294.     SEMA     datsem;
  295. #endif
  296. #ifdef MULTITRD
  297.     BHL     datbhl[3];
  298. #else
  299.     BHL     datbhl[2];
  300. #endif
  301. #ifdef TRANPROC
  302.     LONG     trstmp;
  303.     LONG     cpstmp;
  304.     pCOMLST     datcom;
  305. #endif
  306.     VRLEN     dathgh;
  307.     COUNT     datfil;
  308. #ifdef MULTITRD
  309.     COUNT     datpfn;
  310. #endif
  311.     COUNT     datupd;
  312. } DATBUF;
  313. typedef DATBUF ctMEM *    pDATBUF;
  314.  
  315. #define BEGCTL        phyrec
  316. #define iostart(ctnum)    ((pTEXT) &ctnum->phyrec)
  317.  
  318. typedef struct wfils2 {    /* Partial File Control Structure    */
  319.     ctRECPT    phyrec;    /* last byte offset of file        */
  320.     ctRECPT    delstk;    /* top of delete stack: fixed len data    */
  321.     ctRECPT    numrec;    /* last byte offset written        */
  322.     LONG    reshdr;    /* resource header            */
  323.     LONG    lstmbr;    /* last super file member/position    */
  324.     ctRECPT    sernum;    /* serial number            */
  325. } CTFILE2;
  326. typedef CTFILE2 ctMEM *    pCTFILE2;
  327.  
  328. typedef struct wfils3 {    /* Partial File Control Structure        */
  329.     ctRECPT    phyrec;    /* last byte offset of file        00x    */
  330.     ctRECPT    delstk;    /* top of delete stack: fixed len data    04x    */
  331.     ctRECPT    numrec;    /* last byte offset written        08x    */
  332.     LONG    reshdr;    /* resource header            0cx    */
  333.     LONG    lstmbr;    /* last super file member/position    10x    */
  334.     ctRECPT    sernum;    /* serial number            14x    */
  335.     ctRECPT nument;    /* active entries            18x    */
  336.     LONG    root;    /* B-Tree root                 1cx    */
  337.     LONG    fileid;    /* unique file id            20x    */
  338.     LONG    servid;    /* unique server id            24x    */
  339.     COUNT    verson;    /* configuration options at create    28x    */
  340.     UCOUNT    recsiz;    /* node record size            2ax    */
  341.     UCOUNT    reclen;    /* data record length            2cx    */
  342.     UCOUNT    extsiz;    /* extend file (chunk) size        2dx    */
  343.     COUNT    flmode;    /* file mode (virtual, etc)        30x    */
  344.     UCOUNT    logtyp; /* permanent components of file mode    32x    */
  345.     UCOUNT    maxkbl;    /* maximum key bytes leaf-var        34x    */
  346.     UCOUNT    maxkbn;    /* maximum key bytes non leaf-var     36x    */
  347.     TEXT    updflg;    /* update (corrupt) flag        38x    */
  348.     TEXT    ktype;    /* file type flag            39x    */
  349.     TEXT    autodup;/* duplicate flag            3ax    */
  350.     TEXT    deltyp; /* flag for type of idx delete        3bx    */
  351.     UTEXT    keypad; /* padding byte                3cx    */
  352.     UTEXT    flflvr;    /* file flavor                3dx    */
  353.     UTEXT    flalgn;    /* file alignment            3ex    */
  354.     UTEXT    flpntr;    /* file pointer size            3fx    */
  355.     UCOUNT    clstyp; /* flag for file type            40x    */
  356.     COUNT   length;    /* key length                 42x    */
  357.     COUNT    nmem;    /* number of members            44x    */
  358.     COUNT    kmem;    /* member number            46x    */
  359.     LONG    lanchr;    /* left most leaf anchor        48x    */
  360.     LONG    supid;    /* super file member #            4cx    */
  361.     LONG    hdrpos;    /* header position            50x    */
  362.     LONG    sihdr;    /* superfile header index hdr position    54x    */
  363.     LONG    timeid;    /* time id#                58x    */
  364.     UCOUNT    suptyp;    /* super file type             5cx    */
  365.     UCOUNT    maxmrk;    /* maximum exc mark entries per leaf    5ex    */
  366.     UCOUNT    namlen;    /* MAX_NAME at creation            60x    */
  367.     UCOUNT    xflmod; /* extended file mode info        62x    */
  368.     LONG    defrel;    /* file def release mask        64x    */
  369.     LONG    hghtrn;    /* tran# high water mark for idx    68x    */
  370.     LONG    hdrseq; /* wrthdr sequence #            6cx    */
  371.     LONG    rs3[4];    /* future use                70x    */
  372. } CTFILE3;
  373. typedef CTFILE3 ctMEM *    pCTFILE3;
  374.  
  375. typedef struct wfils {    /* File Control Structure         */
  376.     struct wfils ctMEM
  377.            *nxtfcb;    /* CTFILE link                */
  378.     ctRECPT    phyrec;    /* last byte offset of file        */
  379.     ctRECPT    delstk;    /* top of delete stack: fixed len data    */
  380.     ctRECPT    numrec;    /* last byte offset written        */
  381.     LONG    reshdr;    /* resource header            */
  382.     LONG    lstmbr;    /* last super file member/position    */
  383.     ctRECPT    sernum;    /* serial number            */
  384.     ctRECPT nument;    /* active entries            */
  385.     LONG    root;    /* B-Tree root                 */
  386.     LONG    fileid;    /* unique file id            */
  387.     LONG    servid;    /* unique server id            */
  388.     COUNT    verson;    /* configuration options at create    */
  389.     UCOUNT    recsiz;    /* node record size            */
  390.     UCOUNT    reclen;    /* data record length            */
  391.     UCOUNT    extsiz;    /* extend file (chunk) size        */
  392.     COUNT    flmode;    /* file mode (virtual, etc)        */
  393.     UCOUNT    logtyp; /* permanent components of file mode    */
  394.     UCOUNT    maxkbl;    /* maximum key bytes leaf-var        */
  395.     UCOUNT    maxkbn;    /* maximum key bytes non leaf-var     */
  396.     TEXT    updflg;    /* update (corrupt) flag        */
  397.     TEXT    ktype;    /* file type flag            */
  398.     TEXT    autodup;/* duplicate flag            */
  399.     TEXT    deltyp; /* flag for type of idx delete        */
  400.     UTEXT    keypad; /* padding byte                */
  401.     UTEXT    flflvr;    /* file flavor                */
  402.     UTEXT    flalgn;    /* file alignment            */
  403.     UTEXT    flpntr;    /* file pointer size            */
  404.     UCOUNT    clstyp; /* flag for file type            */
  405.     COUNT   length;    /* key length                 */
  406.     COUNT    nmem;    /* number of members            */
  407.     COUNT    kmem;    /* member number            */
  408.     LONG    lanchr;    /* left most leaf anchor        */
  409.     LONG    supid;    /* super file member #            */
  410.     LONG    hdrpos;    /* header position            */
  411.     LONG    sihdr;    /* superfile header index hdr position    */
  412.     LONG    timeid;    /* time id#                */
  413.     UCOUNT    suptyp;    /* super file type             */
  414.     UCOUNT    maxmrk;    /* maximum exc mark entries per leaf    */
  415.     UCOUNT    namlen;    /* MAX_NAME at creation            */
  416.     UCOUNT    xflmod; /* extended file mode info        */
  417.     LONG    defrel;    /* file def release mask        */
  418.     LONG    hghtrn;    /* tran# high water mark for idx    */
  419.     LONG    hdrseq; /* wrthdr sequence #            */
  420.     LONG    rs3[4];
  421.  
  422.     /* end of permanent information */
  423.  
  424.     LONG    hdroff;    /* index member header offset        */
  425.     LONG    nodstk;    /* temporary index delete stk ptr    */
  426.     LONG    botstk; /* temporary index delete stk ptr    */
  427.     LONG    tmptrn;    /* temporary tran# high water mark    */
  428.     LONG    resrv0;
  429. #ifdef TRANPROC
  430.     LONG    loghnd;    /* unique id entered into tran log    */
  431.     LONG    dellog;    /* delete file high water mark log#    */
  432.     LONG    delpos;    /*   "     "    "     "    "   position    */
  433.     COUNT    omitcp;    /* omit from checkpoint (flag)        */
  434.     COUNT    resrv1;
  435. #endif
  436. #ifdef ctSQL
  437.     LONG    wlkcnt;    /* write lock count            */
  438. #endif
  439. #ifndef MULTITRD
  440.     LONG       retnod;    /* current node                */
  441.     LONG    nent;    /* incremental chg to nument        */
  442.     LONG    curp;    /* current byte position        */
  443.     LONG    curt;    /* temporary byte position        */
  444.     LONG    curr;    /* current resource position        */
  445.     pTEXT   keyp;    /* current key value ptr        */
  446.     pTEXT   keyt;    /* temporary key value ptr        */
  447.     pTEXT   keyl;    /* low level key result            */
  448.     pVOID    datflt;    /* pointer to data filter        */
  449.     pctICON    concur;    /* current context            */
  450. #else
  451.     SEMA    semaf;    /* permanent info semaphore        */
  452.     SEMA    thdrf;    /* temporary info semaphore        */
  453.     SEMA    iosema[2 * NUMCHANEL];
  454.             /* file i/o semaphore            */
  455.     struct reclok ctMEM
  456.           **rlokh;    /* head of record locks            */
  457.     struct reclok ctMEM
  458.           **rlokt;    /* tail of record locks            */
  459.     struct wfils ctMEM
  460.            *hmem;    /* host member ptr            */
  461.     struct wfils ctMEM
  462.            *xmem;    /* next member ptr            */
  463. #endif
  464.     struct wfils ctMEM
  465.            *psuper;    /* ptr to super file control struct    */
  466.     struct wfils ctMEM
  467.            *puse;    /* prev link for use list        */
  468.     struct wfils ctMEM
  469.            *nuse;    /* next link for use list        */
  470.     pVOID    idxflt;    /* pointer to index filter        */
  471.     pABTLST ablist; /* node abort list pointer        */
  472.     pCOUNT  altseq;    /* alternative sequence            */
  473.     pConvMap schema;/* record schema Map            */
  474. #ifdef ctMIRROR
  475.     pTEXT    mflname;/* pointer to mirror file name        */
  476.     RNDFILE    mfd;
  477.     NINT    mstatus;/* mirror status            */    
  478. #endif
  479. #ifdef MULTITRD
  480.     RNDFILE    afd[2 * NUMCHANEL];
  481.             /* file descritor            */
  482.     COUNT    numchn;    /* number of channels            */
  483.     UCOUNT    toggle; /* multi channel toggle            */
  484. #else
  485.     RNDFILE    fd;    /* file descritor            */
  486.     COUNT    retelm;    /* current node element            */
  487. #endif
  488.     UCOUNT    schlen;    /* Map length                */
  489.     COUNT    usrcnt;    /* number of users with file open    */
  490.     COUNT    filnum;    /* file number assigned by user        */
  491.     UCOUNT    srlpos;    /* offset to serial # in record (ISAM)    */
  492.     UCOUNT    rcvcre;    /* recovery create flag            */
  493.     UCOUNT    rcvwrt;    /* recovery update flag            */
  494. #ifdef MULTITRD
  495.  
  496. #else
  497.     UCOUNT    fupd;    /* per transaction update flag        */
  498.     UCOUNT    plen;    /* keyp length flag            */
  499.     UCOUNT    tlen;    /* keyt length flag            */
  500. #endif
  501. #ifdef FPUTFGET
  502. #ifdef ctLOKCNT
  503.     COUNT    lokcnt;
  504. #endif
  505. #endif
  506.     TEXT    chnacs;    /* 'y' 'n' 'v'                */
  507.     TEXT    flname[MAX_NAME];    /* file name        */
  508. } CTFILE;
  509. typedef CTFILE ctMEM *    pCTFILE;
  510. typedef CTFILE ctMEM * ctMEM * ppCTFILE;
  511. #define ctkey(filno)    ctfcbhdr[(filno)]
  512. #define    DATFILE        CTFILE
  513. #define    KEYFILE        CTFILE
  514. #define    VATFILE        CTFILE
  515.  
  516. #ifdef MULTITRD
  517. #define fd    afd[0]
  518. #endif
  519.  
  520. typedef struct trebuf {    /* B-Tree Buffer            */
  521.     struct trebuf ctMEM
  522.            *nxtbuf;
  523.     pTEXT   nodorg;    /* pointer to node ct_origin for I/O    */
  524.     LONG    nodeid; /* node number                */
  525. #ifdef MULTITRD
  526.     LONG    pnodeid;/* pending node id            */
  527. #ifdef TRANPROC
  528.     BHL    bhl[4];    /* buffer hash list pointers        */
  529. #else
  530.     BHL    bhl[3];    /* buffer hash list pointers        */
  531. #endif
  532.     SEMA    semaf;    /* buffer semaphore            */
  533.     pBLKLST bblkh;    /* block list header            */
  534.     pBLKLST bblkt;    /* block list tail            */
  535. #else
  536. #ifdef TRANPROC
  537.     BHL    bhl[3];    /* buffer hash list pointers        */
  538. #else
  539.     BHL    bhl[2];    /* buffer hash list pointers        */
  540. #endif
  541. #endif
  542. #ifdef TRANPROC
  543.     LONG    trstmp; /* oldest update tran#            */
  544.     LONG    cpstmp; /* oldest update tran#            */
  545.     LONG    hghtrn;    /* tran# high water mark for idx    */
  546.     pCOMLST cmlist;    /* pending tran commit list stack ptr    */
  547.     pCOMLST ablist;    /* pending tran abort  list stack ptr    */
  548. #endif
  549.     pCTFILE    keynm;
  550.     pTEXT   mrkpos;
  551.     pTEXT   ct_kyval;/* pointer to key values for node    */
  552. #ifdef MULTITRD
  553.     COUNT    pkeyid; /* pending key id            */
  554. #endif
  555.     COUNT    keyid;    /* key number                */
  556.     COUNT    hstid;    /* host key number            */
  557.     COUNT   klen;    /* key length                 */
  558.     UCOUNT  maxb;    /* maximum bytes per node        */
  559.     UCOUNT    maxmrk;    /* maximum exc mark list entries    */
  560.     COUNT   ktipe;    /* key type compression flags ONLY    */
  561.     UCOUNT    begbyt;    /* beginning byte of cur var len ct_key    */
  562.     COUNT    actlen;    /* stored length of cur var len ct_key    */
  563.     COUNT   lstpos;    /* cur var len key pos#            */
  564.     COUNT    cursfx;    /* cur var len key suffix count        */
  565.     TEXT    keyexp[MAXLEN + 4]; /* var key - expansion    */
  566.     TEXT    update;    /* node update indicator 'y/n'         */
  567.     TEXT    confg;    /* regular or duplicate ct_key leaf    */
  568.  
  569. /* beginning of permanent node */
  570.  
  571.     LONG    sucesr;    /* right sibling         0x00    */
  572.     LONG    predsr;    /* left sibling         0x04    */
  573.     UCOUNT  nkv;    /* number of key values     0x08    */
  574.     UCOUNT  nkb;    /* number of key bytes        0x0a    */
  575.     COUNT    numexc;    /* number of exc marks        0x0c    */
  576.     COUNT    lowexc;    /* max-min pos of 1st mark    0x0e    */
  577.     TEXT    bmem;    /* member number        0x10    */
  578.     TEXT    leaf;    /* leaf indicator LEAF/NOLEAF    0x11    */
  579. } TREEBUFF;
  580. typedef TREEBUFF ctMEM *    pTREBUF;
  581.  
  582.  
  583. typedef struct lok {    /* ISAM Lock Table Entry        */
  584.     struct lok ctMEM
  585.            *nxtlok;
  586.     COUNT   datfnm;    /* data file number            */
  587.     UTEXT    ltltyp;    /* lock type                */
  588.     UTEXT    ltisam; /* isam level lock flag            */
  589.     ctRECPT recnum;    /* record number            */
  590. } LOKS;
  591. typedef LOKS ctMEM *    pLOKS;
  592. typedef LOKS ctMEM * ctMEM * ppLOKS;
  593.  
  594. #ifndef ctMEMHDR
  595. /* define ctMEMHDR in ctcmpl.h if default causes alignment problems */
  596. #define ctMEMHDR    SIZEOF(pctSPC)
  597. #endif
  598.  
  599. typedef struct pi1_s {
  600.     pctSPC     pi1lnk;
  601.     TEXT     pi1[PI_UNIT];
  602. } PI1LST;
  603.  
  604. typedef struct pi2_s {
  605.     pctSPC     pi2lnk;
  606.     TEXT     pi2[2 * PI_UNIT];
  607. } PI2LST;
  608.  
  609. typedef struct pi4_s {
  610.     pctSPC     pi4lnk;
  611.     TEXT     pi4[4 * PI_UNIT];
  612. } PI4LST;
  613.  
  614. typedef struct pi8_s {
  615.     pctSPC     pi8lnk;
  616.     TEXT     pi8[8 * PI_UNIT];
  617. } PI8LST;
  618.  
  619. typedef struct piw_s {
  620.     pctSPC    piwlnk;
  621.     TEXT    piw[16 * PI_UNIT];
  622. } PIwLST;
  623.  
  624. typedef struct pix_s {
  625.     pctSPC    pixlnk;
  626.     TEXT    pix[32 * PI_UNIT];
  627. } PIxLST;
  628.  
  629. typedef struct piy_s {
  630.     pctSPC    piylnk;
  631.     TEXT    piy[64 * PI_UNIT];
  632. } PIyLST;
  633.  
  634. typedef struct piz_s {
  635.     pctSPC    pizlnk;
  636.     TEXT    piz[128 * PI_UNIT];
  637. } PIzLST;
  638.  
  639. typedef struct reclok {
  640.     struct reclok ctMEM
  641.         *rllink;/* forward link                */
  642.     struct reclok ctMEM
  643.         *rlrlnk;/* reverse link                */
  644.     ctRECPT    rlbpos;    /* byte position            */
  645.     pBLKLST rlblkh;    /* block list head            */
  646.     pBLKLST rlblkt; /* block list tail            */
  647.     COUNT    rlusrn;    /* user number of owner            */
  648.     COUNT    rltype;    /* write lock or read lock        */
  649. } RECLOK;
  650. typedef RECLOK ctMEM *    pRECLOK;
  651. typedef RECLOK ctMEM * ctMEM * ppRECLOK;
  652.  
  653. #ifdef ctOldALCSET
  654. typedef struct savset {        /* Multiple-Set Buffer        */
  655.     COUNT    qlen;        /* significant length        */
  656.     COUNT    qkey;        /* sequence keyno + 1        */
  657.     TEXT    qbuf[MAXLEN];    /* ct_key buffer        */
  658. #ifdef MUSTFRCE
  659.     TEXT    qold[MAXLEN];
  660. #endif
  661.     } SAVSET;
  662. typedef SAVSET ctMEM *    pSAVSET;
  663. #else
  664. typedef struct savset {        /* Multiple-Set Buffer        */
  665.     struct savset
  666.            *qlnk;        /* link field for hashing    */
  667.     COUNT    qnum;        /* save set number        */
  668.     COUNT    qlen;        /* significant length        */
  669.     COUNT    qkey;        /* sequence keyno + 1        */
  670.     TEXT    qbuf[MAXLEN];    /* ct_key buffer        */
  671. #ifdef MUSTFRCE
  672.     TEXT    qold[MAXLEN];
  673. #endif
  674.     } SAVSET;
  675. typedef SAVSET ctMEM *    pSAVSET;
  676. typedef SAVSET ctMEM * ctMEM *    ppSAVSET;
  677. #endif
  678.  
  679. #ifdef ctCONDIDX
  680. typedef struct cidxhdr {    /* conditional index header */
  681.     COUNT    relkey;
  682.     COUNT    explen;
  683.     LONG    resrvd;
  684.     } CIDXHDR;
  685. #endif
  686.  
  687. #include "ctifil.h"
  688. #include "ctvrec.h"
  689. #include "ctfunp.h"
  690.  
  691. #endif /* ctSTRCH */
  692.  
  693. /* end of ctstrc.h */
  694.